#define _CRT_SECURE_NO_WARNINGS 1
void SelectSort2(int* a, int n)
{
	// 初始化begin为数组的起始位置，end为数组的末尾位置
	int begin = 0;
	int end = n - 1;

	// 当begin小于end时，表示数组中还有元素未排序
	while (begin < end)
	{
		// 初始化最小元素和最大元素的索引为begin
		int mini = begin;
		int maxi = begin;

		// 从begin+1到end遍历数组，寻找当前未排序部分的最小和最大元素
		for (int i = begin + 1; i <= end; i++)
		{
			// 如果当前元素大于已知最大元素的值，更新最大元素的索引
			if (a[i] > a[maxi])
			{
				maxi = i;
			}
			// 如果当前元素小于已知最小元素的值，更新最小元素的索引
			if (a[i] < a[mini])
			{
				mini = i;
			}
		}

		// 将找到的最小元素交换到begin位置
		Swap(&a[mini], &a[begin]);

		// 如果最大元素的索引刚好是begin（此时begin位置的元素已经被最小元素替换了）
		// 那么需要更新最大元素的索引为mini（因为最小元素已经被交换到begin位置）
		if (maxi == begin)
		{
			maxi = mini;
		}

		// 将找到的最大元素交换到end位置
		Swap(&a[maxi], &a[end]);

		// 缩小未排序部分的范围，end向左移动一位，begin向右移动一位
		end--;
		begin++;
	}
}